home *** CD-ROM | disk | FTP | other *** search
/ Aminet 16 / Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso / Aminet / dev / src / wangisrc.lha / wangi / z / ea / ea.c < prev    next >
C/C++ Source or Header  |  1996-02-04  |  3KB  |  166 lines

  1. /*************************************************************************
  2.  *
  3.  * ea
  4.  *
  5.  * Copyright ©1995 Lee Kindness
  6.  * cs2lk@scms.rgu.ac.uk
  7.  *
  8.  * ea.c
  9.  */
  10.  
  11. #include "ea.h"
  12.  
  13. char *StripFile(char *s)
  14. {
  15.     if( s )
  16.     {
  17.         char *tmp = s;
  18.         
  19.         for( ; (tmp = strpbrk(tmp, BRKCHARS)); )
  20.         {
  21.             s = ++tmp;
  22.         }
  23.     }    
  24.     return( s );
  25. }
  26.  
  27.  
  28. void donum(FILEt f, long *num)
  29. {
  30.     if( (*num)++ == 75 )
  31.     {
  32.         mfputc('\n', f);
  33.         mfputc('Z', f);
  34.         *num = 1;
  35.     }
  36. }
  37.  
  38.  
  39. void wtf(char c, FILEt f, long *num, long *check, long *tabs)
  40. {
  41.     switch( c )
  42.     {
  43.         case R_TAB :
  44.             if( (*tabs) >= 10 )
  45.             {
  46.                 donum(f, num);
  47.                 mfputc(R_TAB, f);
  48.                 donum(f, num);
  49.                 mfprintf(f, "%ld", (*tabs)-1 );
  50.                 (*tabs) = 0;
  51.             }
  52.             ++(*tabs);
  53.             break;
  54.  
  55.         default :
  56.             if( *tabs )
  57.             {
  58.                 donum(f, num);
  59.                 mfputc(R_TAB, f);
  60.                 donum(f, num);
  61.                 mfprintf(f, "%ld", (*tabs)-1 );
  62.                 (*tabs) = 0;
  63.             }
  64.             
  65.             donum(f, num);
  66.             mfputc(c, f);
  67.             if( ((*num) % 2) )
  68.                 (*check) -= (long)c;
  69.             else
  70.                 (*check) += (long)c;
  71.             
  72.             break;
  73.     }
  74. }
  75.  
  76. /*************************************************************************
  77.  * main() - DaDDDaaah!
  78.  */
  79.  
  80. int main(int argc, char **argv)
  81. {
  82.     long ret = EXIT_FAILURE;
  83.  
  84.     /* init */
  85.     if( InitSystem() )
  86.     {
  87.         struct Args *args;
  88.         
  89.         if( args = GeteaArgs(argc, argv) )
  90.         {
  91.             FILEt source;
  92.             
  93.             /* Open input file */
  94.             if( source = mfopen(args->arg_Filename, FILEOPEN_READ) )
  95.             {
  96.                 FILEt dest = NULL;
  97.                 long check = 0;
  98.  
  99.                 if( dest = mfopen(args->arg_Dest, FILEOPEN_WRITE) )
  100.                 {
  101.                     long n = 0, tabs = 0;
  102.                     int c;
  103.                     
  104.                     mfprintf(dest, IDENTIFIER "\n"
  105.                                    "ECreator:" CREATOR "\n"
  106.                                    "EInfo:For decoders - ftp://ftp.aminet.org/pub/aminet/comm/misc/ea.lha (soon)\n"
  107.                                    "EFile:%s\n"
  108.                                    "Z\n"
  109.                                    "Z", StripFile(args->arg_Filename));
  110.                     for( c = mfgetc(source);
  111.                          c != EOF;
  112.                          c = mfgetc(source))
  113.                     {
  114.                         switch( c )
  115.                         {
  116.                             case '\n' :
  117.                                 wtf(R_NL, dest, &n, &check, &tabs);
  118.                                 break;
  119.                             
  120.                             case '\r' :
  121.                                 break;
  122.                             
  123.                             case '\t' :
  124.                                 wtf(R_TAB, dest, &n, &check, &tabs);
  125.                                 break;
  126.                             
  127.                             case ' ' :
  128.                                 wtf(R_SPACE, dest, &n, &check, &tabs);
  129.                                 break;
  130.                             
  131.                             case R_NL :
  132.                                 wtf(ESCAPE, dest, &n, &check, &tabs);
  133.                                 wtf(R_NL, dest, &n, &check, &tabs);
  134.                                 break;
  135.                             
  136.                             case R_TAB :
  137.                                 wtf(ESCAPE, dest, &n, &check, &tabs);
  138.                                 wtf(R_TAB, dest, &n, &check, &tabs);
  139.                                 break;
  140.                             
  141.                             case R_SPACE :
  142.                                 wtf(ESCAPE, dest, &n, &check, &tabs);
  143.                                 wtf(R_SPACE, dest, &n, &check, &tabs);
  144.                                 break;
  145.                             
  146.                             default :
  147.                                 wtf(c, dest, &n, &check, &tabs);
  148.                                 break;
  149.                         }
  150.                     }
  151.                 }
  152.                 mfprintf(dest, "\nX\nXCheck: %ld\n", check);
  153.                 mfclose(dest);
  154.                 mfclose(source);
  155.                 
  156.                 ret = EXIT_SUCCESS;
  157.             } else
  158.                 mprintf("Can't open %s\n", args->arg_Filename);
  159.             
  160.             FreeeaArgs(args);    
  161.         }
  162.         FreeSystem();    
  163.     }
  164.     return( ret );
  165. }
  166.